//
//  EmoticonsTextView.swift
//  EmotionInput
//
//  Created by 杨兵 on 15/5/24.
//  Copyright (c) 2015年 bing. All rights reserved.
//  表情属性文本

import UIKit

class EmoticonsTextView: UITextView {
    // 设置文本属性,当调用的的时候,将图片插入视图中
    func insertAttachment(emoticon: EmoticonModal) {
        
        // 删除键,删除文本
        if emoticon.isRemoveButton {
            deleteBackward()
        }
        
        // 处理图片,将图片插入文本中
        // -----------------装换为属性文本-------------------
        
        // 有图片,就不是emoji
        if emoticon.chs != nil {
            
            
            // 将图片标记的文本转换成属性文本
            let attrStr = EmoticonsAttachment().transformEmoticonsToAttributedString(emoticon, height: self.font.lineHeight)
            
            // 将文本添加到 textView
            // a.拿出可变文
            var textStr = NSMutableAttributedString(attributedString: self.attributedText)
            // b.追加文本
            textStr.replaceCharactersInRange(self.selectedRange, withAttributedString: attrStr)
            
            // 重写添加整个文本属性
            textStr.addAttribute(NSFontAttributeName, value: self.font, range: NSMakeRange(0, textStr.length))
            
            // 记录当前用户选中的光标位置
            let range = self.selectedRange
            
            // 设置文本,替换 self的所有属性文本
            self.attributedText = textStr
            
            // 恢复光标的位置
            self.selectedRange = NSMakeRange(range.location + 1, 0)
            
        } else if emoticon.emojiStr != nil {
            self.replaceRange(self.selectedTextRange!, withText: emoticon.emojiStr!)
        }
        
        
        // 插入图片是不会调用代理方法的,手动调用
        self.delegate?.textViewDidChange!(self)
        
    }

    
    func fullText() -> String!{
        // -----------------装换为文字-------------------
        let attrStr = self.attributedText
        var strM = String()
        
        self.attributedText.enumerateAttributesInRange(NSMakeRange(0, attrStr.length), options: NSAttributedStringEnumerationOptions(0)) { (dict, range, _) -> Void in
            
            
            // 遍历 便于区分文字与图
            if let attachment = dict["NSAttachment"]  as? EmoticonsAttachment {
                strM += attachment.chs!
            } else {
                let str = (attrStr.string as NSString).substringWithRange(range)
                strM += str
            }
        }
        
        return strM
    }

}
